﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using TrustX.Dados;
using AcadPos.Entity;
using System.Data.SqlClient;

namespace AcadPos.Data
{
    public class DBNivelTitulacao
    {
        #region Listar Níveis de titulação
        public DataTable listarNiveisTitulacao(string pDescricao)
        {
            string SQL = @"SELECT tnt.ID_NIVEL_TITULACAO,
                                   tnt.DESCRICAO AS NIVEL,
                                   tnt.SIGLA_FEMININO AS SIGLAF,
                                   tnt.SIGLA_MASCULINO AS SIGLAM,
                                   tnt.SITUACAO
                            FROM   TB_NIVEL_TITULACAO tnt
                            WHERE UPPER(tnt.DESCRICAO) LIKE '%' + UPPER(@DESCRICAO) + '%'
                            ORDER BY tnt.DESCRICAO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, pDescricao);
            return db.GetDataTable();
        }
        #endregion

        #region Verificar Titulação
        public DataTable titulacaoExiste(string pDescricao)
        {
            string SQL = @"SELECT tnt.ID_NIVEL_TITULACAO
                                   
                            FROM   TB_NIVEL_TITULACAO tnt

                            WHERE UPPER(tnt.DESCRICAO) = UPPER(@DESCRICAO) ";

            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, pDescricao);
            return db.GetDataTable();
        }
        #endregion

        #region Obtém dados Nível de Titulação
        public NivelTitulacao getNivelTitulacao(int pCodNivel)
        {
            string SQL = @"SELECT tnt.ID_NIVEL_TITULACAO,
                                   tnt.DESCRICAO AS NIVEL,
                                   tnt.SIGLA_FEMININO AS SIGLAF,
                                   tnt.SIGLA_MASCULINO AS SIGLAM,
                                   tnt.SITUACAO
                            FROM   TB_NIVEL_TITULACAO tnt
                            WHERE tnt.ID_NIVEL_TITULACAO = @ID_NIVEL_TITULACAO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_NIVEL_TITULACAO", SqlDbType.Int, pCodNivel);
            try
            {
                db.AbrirConexao();
                SqlDataReader dr = db.ExecuteReader();
                NivelTitulacao nivel = new NivelTitulacao();
                if (dr.Read())
                {
                    nivel.Codigo = Convert.ToInt32(dr["ID_NIVEL_TITULACAO"]);
                    nivel.Descricao = dr["NIVEL"].ToString();
                    nivel.SiglaFeminina = dr["SIGLAF"].ToString();
                    nivel.SiglaMasculina = dr["SIGLAM"].ToString();
                    nivel.Situacao = dr["SITUACAO"].ToString();
                }
                return nivel;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }
            finally
            {
                db.FecharConexao();
            }
        }
        #endregion

        #region Incluir Nível de Titulação
        public bool incluirNivelTitulacao(NivelTitulacao nivel, string usuario)
        {
            string SQL = @"INSERT INTO TB_NIVEL_TITULACAO
                                  (
                                    DESCRICAO,
                                    SIGLA_FEMININO,
                                    SIGLA_MASCULINO,
                                    SITUACAO,
                                    DATA_CADASTRO
                                  )
                                VALUES
                                  (
                                    UPPER(@DESCRICAO),
                                    @SIGLA_FEMININO,
                                    @SIGLA_MASCULINO,
                                    @SITUACAO,
                                    GETDATE()
                                  )";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, nivel.Descricao);
            db.AddParam("@SIGLA_FEMININO", SqlDbType.VarChar, nivel.SiglaFeminina);
            db.AddParam("@SIGLA_MASCULINO", SqlDbType.VarChar, nivel.SiglaMasculina);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, nivel.Situacao);
           
            //return db.ExecuteNonQuery();
            
            bool inseriu = db.ExecuteNonQuery();
            if (inseriu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'INSERT',
                        'TB_NIVEL_TITULACAO',
                        ((SELECT CAST(MAX(ID_NIVEL_TITULACAO) AS VARCHAR) FROM TB_NIVEL_TITULACAO) 
                        + ' | ' + UPPER(@DESCRICAO)
                        + ' | ' + UPPER(@SIGLA_FEMININO)
                        + ' | ' + UPPER(@SIGLA_MASCULINO)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@DESCRICAO", SqlDbType.VarChar, nivel.Descricao);
                db.AddParam("@SIGLA_FEMININO", SqlDbType.VarChar, nivel.SiglaFeminina);
                db.AddParam("@SIGLA_MASCULINO", SqlDbType.VarChar, nivel.SiglaMasculina);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, nivel.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return inseriu;
        }
        #endregion

        #region Alterar Nível de Titulação
        public bool alterarNivelTitulacao(NivelTitulacao nivel, string usuario)
        {
            string SQL = @"UPDATE TB_NIVEL_TITULACAO
                            SET    DESCRICAO           = @DESCRICAO,
                                   SIGLA_FEMININO      = @SIGLAF,
                                   SIGLA_MASCULINO     = @SIGLAM,
                                   SITUACAO            = @SITUACAO
                            WHERE  ID_NIVEL_TITULACAO  = @ID_NIVEL_TITULACAO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_NIVEL_TITULACAO", SqlDbType.Int, nivel.Codigo);
            db.AddParam("@DESCRICAO", SqlDbType.VarChar, nivel.Descricao);
            db.AddParam("@SIGLAF", SqlDbType.VarChar, nivel.SiglaFeminina);
            db.AddParam("@SIGLAM", SqlDbType.VarChar, nivel.SiglaMasculina);
            db.AddParam("@SITUACAO", SqlDbType.VarChar, nivel.Situacao);
            //return db.ExecuteNonQuery();

            bool atualizou = db.ExecuteNonQuery();
            if (atualizou)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'UPDATE',
                        'TB_NIVEL_TITULACAO',
                        (CAST(@ID_NIVEL_TITULACAO AS VARCHAR) 
                        + ' | ' + UPPER(@DESCRICAO)
                        + ' | ' + UPPER(@SIGLA_FEMININO)
                        + ' | ' + UPPER(@SIGLA_MASCULINO)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_NIVEL_TITULACAO", SqlDbType.Int, nivel.Codigo);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, nivel.Descricao);
                db.AddParam("@SIGLA_FEMININO", SqlDbType.VarChar, nivel.SiglaFeminina);
                db.AddParam("@SIGLA_MASCULINO", SqlDbType.VarChar, nivel.SiglaMasculina);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, nivel.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return atualizou;
        }
        #endregion

        #region Excluir Nível de Titulação
        public bool excluirNivelTitulacao(NivelTitulacao nivel, string usuario)
        {
            string SQL = @"DELETE 
                            FROM   TB_NIVEL_TITULACAO
                            WHERE  ID_NIVEL_TITULACAO = @ID_NIVEL_TITULACAO";
            DataAccess db = new DataAccess(SQL);
            db.AddParam("@ID_NIVEL_TITULACAO", SqlDbType.Int, nivel.Codigo);
            //return db.ExecuteNonQuery();

            bool excluiu = db.ExecuteNonQuery();
            if (excluiu)
            {
                SQL = @"INSERT INTO TB_AUDITORIA
                      (
                        ACAO,
                        TABELA,
                        DESCRICAO,
                        USUARIO,
                        DATA                                    
                      )
                    VALUES
                      (                                     
                        'DELETE',
                        'TB_NIVEL_TITULACAO',
                        (CAST(@ID_NIVEL_TITULACAO AS VARCHAR) 
                        + ' | ' + UPPER(@DESCRICAO)
                        + ' | ' + UPPER(@SIGLA_FEMININO)
                        + ' | ' + UPPER(@SIGLA_MASCULINO)
                        + ' | ' + UPPER(@SITUACAO)),
                        UPPER(@USUARIO),
                        GETDATE()
                      )";

                db = new DataAccess(SQL);

                db.AddParam("@ID_NIVEL_TITULACAO", SqlDbType.Int, nivel.Codigo);
                db.AddParam("@DESCRICAO", SqlDbType.VarChar, nivel.Descricao);
                db.AddParam("@SIGLA_FEMININO", SqlDbType.VarChar, nivel.SiglaFeminina);
                db.AddParam("@SIGLA_MASCULINO", SqlDbType.VarChar, nivel.SiglaMasculina);
                db.AddParam("@SITUACAO", SqlDbType.VarChar, nivel.Situacao);
                db.AddParam("@USUARIO", SqlDbType.VarChar, usuario);
            }

            db.ExecuteNonQuery();
            return excluiu;
        }
        #endregion
    }
}
